package sword_offer;

/**
 * @ClassName _50firstUniqChar
 * @Description: 在字符串 s 中找出第一个只出现一次的字符。如果没有，返回一个单空格。 s 只包含小写字母。
 *
 * 示例 1:
 *
 * 输入：s = "abaccdeff"
 * 输出：'b'
 * 示例 2:
 *
 * 输入：s = ""
 * 输出：' '
 *  
 *
 * 限制：
 *
 * 0 <= s 的长度 <= 50000
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @Author: yongliang.ma
 * @Create_time:2022/10/13 10:31
 */
public class _50firstUniqChar {

    public static void main(String[] args) {
        System.out.println('a' - 97);
        System.out.println('z' - 97);
    }

    // 时间复杂度O(n)， 空间复杂度 固定，TODO 待验证是否有更好的办法
    // 创建数组，长度为26，存储26小写字母对应出现的次数：小写字母和数组下标相差固定值97，arr[0]存储a，表示arr['a' - 97]
    public char firstUniqChar(String s) {
        int[] count = new int[26];
        for (int i = 0; i < s.length(); i++) {
            count[s.charAt(i) - 97] = count[s.charAt(i) - 97] + 1;
        }
        for (int i = 0; i < s.length(); i++) {
            if (count[s.charAt(i) - 97] == 1)
                return s.charAt(i);
        }
        return ' ';
    }
}
